home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
ms_dos
/
tool
/
conhlp03
/
fswchsrc
/
lookfile.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-20
|
3KB
|
127 lines
/*
lookfile.c
1994/03/04 1994/03/08 1995/02/20
*/
#include <stdlib.h>
#include "fswch.h"
int instr( char a, const char *); /* 文字列sの文字aの位置 */
int split( char *s, char **str, const char *sep); /* 文字の切り分け */
int strcmp( const char *,const char *); /* 文字列の比較 */
char *strcpy( char *,const char *); /* 文字列のコピー */
char *strcat( char *a,const char *b); /* 文字列の連結 */
char *koumoku( char *k ); /* 項目とりだし */
void filetype( FILE *fp ); /* ファイル表示 */
void lookfile( char cm,int no ){
static char buff[256],filename[85],pname[85];
char *bp,*str[10];
struct find_t fname;
fpos_t ptr;
FILE *fp;
/* キー選択チェック */
if(no<0) return;
ptr = idxptr[no];
fsetpos(idxfp,&(ptr));
/* DIR を得る */
do{
fgets(buff,256,idxfp);
if((bp=koumoku(buff))==NULL){
fputs("項目エラー\r\n",stderr);
return;
}
if(cm=='g' && strcmp(buff,"README")==0) break;
if(cm=='d' && strcmp(buff,"MANUAL")==0) break;
if(strcmp(buff,"DIR")==0) break;
}while(buff[0]>='A' && buff[0]<='Z');
cprintf("\r\n\nno:%3d %s %s\r\n",no,buff,bp);
strcpy(pname,"q:");
if(strcmp(buff,"MANUAL")==0 || strcmp(buff,"README")==0){
strcpy(filename,pname);
strcat(filename,bp);
} else {
int sc;
strcat(pname,bp);
strcat(pname,"\\"); /* ディレクトリパス */
sc = split(bp,str,"\\"); /* \ で 分割 */
strcpy(filename,pname);
strcat(filename,str[sc-1]); /* ディレクトリ名をファイル名に */
if(cm=='g') strcat(filename,".ggg");
if(cm=='d') strcat(filename,".doc");
}
if((fp=fopen(filename,"r"))==NULL){
strcpy(filename,pname);
if(cm=='g')strcat(filename,"*.ggg");
if(cm=='d')strcat(filename,"*.doc");
_dos_findfirst(filename,_A_NORMAL,&fname); /* 通常ファイル */
strcpy(filename,pname);
strcat(filename,fname.name);
}
cprintf(ESC"0J"ESC_GREEN"file = %s\r\n"ESC_WHITE,filename);
/*
cputs(ESC_YELLOW"--- Hit anykey. ---");
getop();
cputs(ESC"2K\r"ESC_WHITE);
*/
if(fp==NULL) if((fp=fopen(filename,"r"))==NULL) return;
/*
1. README or MANUAL
2. DIR
3. *.doc *.ggg
*/
if(pg==NULL){
filetype(fp);
fclose(fp);
}else{
fclose(fp);
strcpy(buff,pg);
strcat(buff," ");
strcat(buff,filename);
curon;
system( buff );
curoff;
/*
spawnlp(P_WAIT,pg,pg,filename,NULL);
*/
}
}
void filetype( FILE *fp ){ /* ファイル表示 */
int i;
char c;
int lc=0;
for(i=0;(c=fgetc(fp))!=EOF;i++){
if( c!='\n' && c!='\t' && c!=0x1b && c < 0x20 || c == 0x7f )
cputs(ESC_YELLOW"."ESC_WHITE);
else putch(c);
if(c=='\n'){
putch('\r');
i=0;
lc++;
}
if(i>78 && !(
/* 全角文字 一文字目 ? */
0x80<c && c<0xa0 || 0xdf< c && c < 0xf0
) ){ i=0; lc++; }
if(i==0 && lc==20){
cputs(ESC_GREEN"--- more (esc,取消:quit) ---"
ESC_WHITE);
if(instr(getop(),"\x1b\x11")) return;
cputs(ESC"2K\r");
lc=0;
}
}
cputs("\r\n"ESC_YELLOW"File End. Hit anykey."ESC_WHITE);
getop();
clstext();
}